﻿#include "header.h"

/*

给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。

示例 1：
输入：head = [1,2,6,3,4,5,6], val = 6
输出：[1,2,3,4,5]

示例 2：
输入：head = [], val = 1
输出：[]

示例 3：
输入：head = [7,7,7,7], val = 7
输出：[]
  
提示：
列表中的节点数目在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= val <= 50

*/

// 迭代
class Solution1 {
public:
	ListNode* removeElements(ListNode* head, int val) {
		ListNode *dummy = new ListNode(-1, head);
		ListNode *cur = dummy;
		while (cur->next) {
			if (cur->next->val == val) {
				cur->next = cur->next->next;
			}
			else {
				cur = cur->next;
			}
		}
		return dummy->next;
	}
};

// 递归
class Solution {
public:
	ListNode* removeElements(ListNode* head, int val) {
		if (!head) return head;
		head->next = removeElements(head->next, val);
		return head->val == val ? head->next : head;
	}
};